package com.qn.example.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qn.example.mapper.login;
import com.qn.example.pojo.Employee;
import com.qn.example.pojo.Page;
import com.qn.example.pojo.R;
import com.qn.example.service.loginService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;


/**
 * @author 21276
 * @version 1.0
 * @date 2023/4/26 19:02
 */
@Slf4j
@Service
public class loginServiceImpl implements loginService {

    @Autowired(required = false)
    private login login;

    @Override
    public R<Employee> login(Employee employee) {
        //1. 根据用户查找是否存在该用户
        Employee dbEmployee = login.findByName(employee);
        //2. 判断用户名是否查找到用户，如果没有查找到直接失败
        if(dbEmployee==null){
            return R.error("用户名不存在");
        }
        //3. 对比密码是否正确   用户输入的密码是明文的，需要进行md5加密才能够对比
        String inputPassword = DigestUtils.md5DigestAsHex(employee.getPassword().getBytes());
        if(!dbEmployee.getPassword().equals(inputPassword)){
            return R.error("密码错误");
        }
        //4. 查看登录用户的状态是否正常
        if(dbEmployee.getStatus()==0){
            return  R.error("用户被禁用");
        }
        //5. 如果上面三个情况都符合，允许登录
        return R.success(dbEmployee);
    }

    @Override
    public void save(Employee employee) {
//        //检查当前用户名是否已经存在，如果存在则直接走异常提议，如果不存在再添加
//        Employee dbEmp = login.findByName(employee);
//        if (dbEmp!=null){
//            //该用户已经存在，抛出用户名已经存在的异常
//            throw new NameExistsException(dbEmp.getUsername()+"已经存在。");
//        }
        //由于页面提交的数据中没有密码，所以新增的用户需要有一个默认密码123456
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
        //补全初始用户状态为启用
        employee.setStatus(1);
        //设置创建时间和修改时间
        employee.setCreateTime(LocalDateTime.now());
        employee.setUpdateTime(LocalDateTime.now());
        //调用dao层添加数据的方法
        login.save(employee);
    }

    @Override
    public Page<Employee> findByPage(Integer page, Integer pageSize, String name) {
        //开启分页
        PageHelper.startPage(page,pageSize);

        //调用dao层的方法查询数据
        List<Employee> pageList = login.findByPage(name);
        //封装封装PageInfo对象
        PageInfo<Employee> pageInfo = new PageInfo<>(pageList);
        //封装返回给页面的Page对象
        Page<Employee> pageBean = new Page<>();
        //向page对象中添加数据
        pageBean.setRecords(pageInfo.getList());
        pageBean.setPage(pageInfo.getPageNum());
        pageBean.setTotal(pageInfo.getTotal());
        pageBean.setPageSize(pageInfo.getPageSize());

        return pageBean;
    }


    //修改员工信息
    @Override
    public void updateEmp(Employee employee) {
        employee.setUpdateTime(LocalDateTime.now());
        login.updateEmp(employee);
    }

    //根据id查询员工的信息
    @Override
    public Employee findById(Long id) {
        Employee employee = login.findById(id);
        return employee;
    }
}
